package IO;

/*
作用：打印流可以实现方便、高效的打印数据到文件中去。打印流一般是指：PrintStream，PrintWriter两个类。
可以实现打印什么数据就是什么数据，例如打印整数97写出去就是97，打印boolean的true，写出去就是true
PrintStream和PrintWriter的区别
1.打印数据功能上是一模一样的，都是使用方便，性能高效（核心优势）。
2.PrintStream继承自字节输出流OutputStream，支持写字节数据的方法。
3.PrintWriter继承字符输出流Writer，支持写字符数据出去。

打印流有几种？各有什么特点？
    1.打印流一般是指：PrintStream,PrintWriter两个类。
    2.打印功能2者是一样的使用方式。
    3.PrintStream继承自字节输出流OutputStream，支持写字节。
    4.PrintWriter继承自字符输出流Writer，支持写字符。
*/
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
public class 打印流 {
	public static void main(String[] args) throws Exception {
		System.out.println("非常美丽");
		System.out.println("超级美丽");
		
		PrintStream out= System.out;//该语句应在重定向前执行，否则不能重新改为屏幕输出
		//PrintWriter pw=new PrintWriter(System.out);
		PrintStream ps=new PrintStream("d:\\tmp\\log.txt");
		System.setOut(ps);//输出重定向，将System.out由终端输出改为文件输出
		System.out.println("文件输出");//输出至文件d:\\tmp\\log.txt
		System.out.println("不是终端");//输出至文件d:\\tmp\\log.txt
		//PrintStream out= System.out;//该语句应在重定向前执行
		System.setOut(out);
		System.out.println("不是终端--");//输出至文件d:\\tmp\\log.txt
		System.out.println("不是终端--");//输出至文件d:\\tmp\\log.txt
		
		//OutputStreamWriter osw = new OutputStreamWriter(out);
		//注：java.io.PrintWriter构造方法的参数也可以是字节流, 即：
      //PrintWriter的构造方法如果第一个参数为流，那么就可以再传入一个boolean型的参数，若该值为true，那么当前PrintWriter就
      //具有了自动行刷新功能，这时每当我们使用println方法写出一行字符串后就会自动调用flush().
		PrintWriter pw=new PrintWriter(System.out); //设置自动刷新的打印流在文件对象后面加true
		pw.println("沉默王二");
		pw.print("沉 ");
		pw.print("默 ");
		pw.print("王 ");
		pw.print("二 ");
		pw.println();

		pw.printf("姓名：%s，年龄：%d，成绩：%f", "沉默王二", 18, 99.9);
		pw.flush();//未设置自动刷新，如果设置自动刷新，则可不执行该命令，默认的缓存区大小为8Kb,如不刷新缓存区，缓冲区未满，则不会执行写入操作
	}
}
